// import type { AxiosResponse } from 'axios';

// baseRequestClient 和 requestClient 都是 axios的实例
// 区别在于 请求和响应拦截的设置不一样
// baseRequestClient 是使用的默认请求拦截和响应拦截
// requestClient它是集成了多个拦截器AuthenticateResponseInterceptor、errorMessageResponseInterceptor，
// 鉴权相关 authenticateResponseInterceptor
// 错误统一处理 errorMessageResponseInterceptor
// 更改响应结构 defaultResponseInterceptor
// [注意] 使用baseRequestClient发送请求时 响应类型需要使用AxiosResponse<实际返回数据类型>

import type { AxiosResponse } from 'axios';

import { baseRequestClient, requestClient } from '#/api/request';
// .env文件中的环境变量在开发环境下 可以通过 import.meta.env访问
// 在生产环境下 通过window._VBEN_ADMIN_PRO_APP_CONF_ 访问

// 获取验证码
export const getCaptchaImage = () =>
  // axios.get<AuthApi.GetCaptchaImageResult>('/api/captchaImage');
  baseRequestClient.get<AxiosResponse<AuthApi.GetCaptchaImageResult>>(
    '/captchaImage',
  );
// baseRequestClient.get<AxiosResponse<AuthApi.GetCaptchaImageResult>>(
//   // 'http://192.168.68.116:8080/captchaImage',
//   '/captchaImage',
// );

// 用户注册
export const userRegister = (data: AuthApi.RegisterParams) =>
  // axios.post('/api/register', data);
  baseRequestClient.post<AxiosResponse<AuthApi.RegisterResult>>(
    '/register',
    data,
  );
// 用户登录
export const userLogin = (data: AuthApi.LoginParams) =>
  // axios.post('/api/register', data);
  baseRequestClient.post<AxiosResponse<AuthApi.LoginResult>>('/login', data);
// axios.post('http://192.168.68.116:8080/doc.html', data);

// export namespace AuthApi {
//   /** 登录接口参数 */
//   export interface LoginParams {
//     password?: string;
//     username?: string;
//   }

export namespace AuthApi {
  export interface RegisterParams {
    username: string;
    password: string;
    uuid: string;
    code: string;
  }

  export interface RegisterResult {
    msg: string;
    code: number;
  }
  export interface GetCaptchaImageResult {
    msg: string;
    img: string;
    code: number;
    captchaOnOff: boolean;
    uuid: string;
  }

  /** 登录接口参数 */
  export interface LoginParams {
    username: string;
    password: string;
    uuid: string;
    code: string;
  }
  /** 登录接口返回值 */
  export interface LoginResult {
    // accessToken: string;
    msg: string;
    code: number;
    token: string;
  }

  export interface RefreshTokenResult {
    data: string;
    status: number;
  }
}

/**
 * 登录
 */
export async function loginApi(data: AuthApi.LoginParams) {
  return requestClient.post<AuthApi.LoginResult>('/auth/login', data);
}

/**
 * 刷新accessToken
 */
export async function refreshTokenApi() {
  return baseRequestClient.post<AuthApi.RefreshTokenResult>('/auth/refresh', {
    withCredentials: true,
  });
}

/**
 * 退出登录
 */
export async function logoutApi() {
  return baseRequestClient.post('/auth/logout', {
    withCredentials: true,
  });
}

/**
 * 获取用户权限码
 */
export async function getAccessCodesApi() {
  return requestClient.get<string[]>('/auth/codes');
}
